package model.algorithmes;

import model.observer.SensorObserver;
import model.subject.Sensor;
import model.value.VersionnedValue;

/**
 * Implémentation de l'interface SpreadingAlgorithme, pour une diffusion des valeurs par époques. Ici, on ne garde pas de copie de la valeur à diffuser à tous les
 * observeurs et on n'empêche pas non plus la modification de cette valeur. On maintient néanmoins une certaine logique de "synchronisation" des observeurs en
 * associant la valeur à diffuser à un numéro de version.
 */
public class EpochSpreadingImpl implements SpreadingAlgorithme {

	private VersionnedValue currentValue;

	private Sensor sensor;

	@Override
	public void configure(Sensor sensor) {
		this.sensor = sensor;
	}

	@Override
	public VersionnedValue getValue() {
		return currentValue;
	}

	@Override
	public void execute() {
		currentValue = sensor.getRealValue();

		for(SensorObserver observer : sensor.getObservers()) {
			observer.update(sensor);
		}
	}
	
	@Override
	public void setValue(int value) {
		sensor.setRealValue(value);
	}

}
